<?php
class Customer_Form_UserRegister extends TBB_Form
{
	public function init()
	{		
		// create username
		$username = $this->_createUsernameElement();
		
		// create password
		$password = $this->_createPasswordElement();
		
		// create password confirm
		$passwordConfirm = $this->_createPasswordConfirmElement();	
		
		// create full name element
		$fullName = $this->_createFullnameElement();
		
		// create email element
		$email = $this->_createEmailElement();
				
		// create SSN element
		$ssn = $this->_createSSNElement();	
		
		// create mobile
		$mobile = $this->_createMobileElement();

		// create captcha
		$captcha = $this->_createCaptcha();		
		
		// create login button
		$submit = $this->_createSubmitButton();
		
		$this->addElements(array($username, $password, $passwordConfirm, $fullName, $email, $ssn, $mobile, $captcha, $submit));
		$this->addDisplayGroup(array('username', 'password', 'passwordConfirm', 'fullName', 'email', 'ssn', 'mobile', 'captcha', 'submit'), 'registerGroup');
		        
		$this->setDecorators($this->_formDecorators);
		$this->setDisplayGroupDecorators($this->_displayGroupDecorators);
		
		// override fieldset class
		$this->getDisplayGroup('registerGroup')->setAttrib('class', 'fieldsetForm span-7');
	}
	
	private function _createMobileElement()
	{
		$mobileNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập số điện thoại.');
		$mobileRegexValidator = $this->_createRegexValidator('/[0-9]{7,20}/', 'Số điện thoại không hợp lệ');
		$mobile = $this->createElement('text', 'mobile')
					   ->setLabel('Số điện thoại: ')
					   ->setRequired(true)
					   ->addValidators(array(
							array($mobileNotEmptyValidator, true),
							array($mobileRegexValidator, true)));
		$this->_customizeFormElement($mobile);
		return $mobile;
	}
	
	private function _createCaptcha()
	{		
		$captchaAdapter = new Zend_Captcha_Image();
		$captchaAdapter->setFont('./fonts/times.ttf')
					   ->setWordlen(5)
					   ->setLineNoiseLevel(4)
					   ->setDotNoiseLevel(20)
					   ->setMessage('Làm ơn nhập mã xác nhận.', 'badCaptcha');				   
		$captcha = new Zend_Form_Element_Captcha('captcha', array(
		    'captcha' => $captchaAdapter
		));
		$captcha->setLabel('Mã xác nhận: ')
				->setRequired(true)
				->setAutoInsertNotEmptyValidator(false);
		$captcha = $this->_customizeFormElement($captcha);
		return $captcha;
	}
	
	private function _createSubmitButton()
	{
		$submit = $this->createElement('submit', 'submit')
					   ->setLabel('Đăng ký')
					   ->setDecorators($this->_submitDecorators)					   
					   ->setAttribs(array(
							'class' => 'span-4 submitDecorator',
						));
		return $submit;
	}
	
	private function _createSSNElement()
	{
		$ssnNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập CMND');
		$ssnStringLengthValidator = $this->_createStringLengthValidator(9, 9, 
								'CMND quá ngắn. CMND phải có %min% chữ số.',
								'CMND quá dài. CMND phải có %min% chữ số.');
		$ssn = $this->createElement('text', 'ssn')
					->setLabel('CMND: ')
					->setRequired(true)
					->addFilters(array('StringTrim', 'StringToLower'))		
					->addValidators(array(
						array($ssnNotEmptyValidator, true),
						array($ssnStringLengthValidator, true)));
		$ssn = $this->_customizeFormElement($ssn);
		return $ssn;
	}
	
	private function _createUsernameElement()
	{
		$usernameNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập tên đăng nhập');
		$uniqueUsernameValidator = new TBB_Validate_UniqueUsername(new Admin_Model_Users());
		$username = $this->createElement ( 'text', 'username' )
						 ->setLabel ( 'Tên đăng nhập: ' )
						 ->setAutoInsertNotEmptyValidator(false)
						 ->setRequired ( true )
						 ->addFilter ( 'StripTags' )
						 ->setValidators(array(array($usernameNotEmptyValidator, true),
						 					   array($uniqueUsernameValidator, true)));
		$username = $this->_customizeFormElement($username);
		return $username;
	}
	
	private function _createPasswordConfirmElement()
	{
		$passwordNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập mật khẩu');
		$passwordStringLengthValidator = $this->_createStringLengthValidator(3, 40, 
									  'Mật khẩu quá ngắn. Mật khẩu phải có ít nhất %min% chữ số',
									  'Mật khẩu quá dài. Mật khẩu chỉ được có nhiều nhất là %max% chữ số');
		$passwordConfirm = $this->createElement('password', 'passwordConfirm')
								->setLabel('Nhập lại mật khẩu')
						 	    ->setAutoInsertNotEmptyValidator(false)
								->setRequired(true)
								->addPrefixPath('TBB_Validate', 'TBB/Validate/', 'validate')
								->setFilters(array('StringTrim'))
								->setValidators(array(array($passwordNotEmptyValidator, true),
										      array($passwordStringLengthValidator, true),
										      array('PasswordConfirmation', true)));					
		$passwordConfirm = $this->_customizeFormElement($passwordConfirm);
		return $passwordConfirm;
	}
	
	private function _createPasswordElement()
	{
		$passwordNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập mật khẩu');
		$passwordStringLengthValidator = $this->_createStringLengthValidator(3, 40, 
									  'Mật khẩu quá ngắn. Mật khẩu phải có ít nhất %min% chữ số',
									  'Mật khẩu quá dài. Mật khẩu chỉ được có nhiều nhất là %max% chữ số');		
		$password = $this->createElement ( 'password', 'password' )
						 ->setLabel ( 'Mật khẩu: ' )
						 ->setAutoInsertNotEmptyValidator(false)
						 ->setRequired ( true )
						 ->setFilters(array('StringTrim'))
						 ->setValidators(array(array($passwordNotEmptyValidator, true),
						   			           array($passwordStringLengthValidator, true)));
		$password = $this->_customizeFormElement($password);
		return $password;
	}
	
	private function _createFullnameElement()
	{
		$fullName = $this->createElement('text', 'fullName')
						 ->setLabel('Họ tên đầy đủ: ')
						 ->setRequired(true)
						 ->addErrorMessage('Làm ơn nhập họ tên đầy đủ.')
						 ->addFilter('StripTags');
		$fullName = $this->_customizeFormElement($fullName);
		return $fullName;
	}
	
	private function _createEmailElement()
	{
		$emailNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập email');		
		$emailStringLengthValidator = $this->_createStringLengthValidator(3, 128,
								 'Email quá ngắn. Email phải có ít nhất là %min% chữ.', 
								 'Email quá dài. Email chỉ được có nhiều nhất là %max% chữ.');
		$emailValidator = $this->_createEmailEmailAddressValidator('Email không hợp lệ.');
		$email = $this->createElement('text', 'email')
					  ->setLabel('Email: ')
					  ->setRequired(true)
					  ->addFilters(array('StringTrim', 'StringToLower'))		
					  ->addValidators(array(
						array($emailNotEmptyValidator, true ),
						array($emailStringLengthValidator, true ),
						array($emailValidator, true)));
		$email = $this->_customizeFormElement($email);
		return $email;		
	}
}